﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using MySql.Data.MySqlClient;
using Mx.Ipn.Escom.TT20080015.Modelo.Datos;
using Mx.Ipn.Escom.TT20080015.Modelo.DB;

namespace Mx.Ipn.Escom.TT20080015.Modelo.DB
{
    public class HospitalManager : ConexionMySql
    {
        /// <summary>
        /// Éste método hace la llamada al procedimiento que registra al Hospital en la base de datos.
        /// </summary>
        /// <param name="hosp">Objeto Hospital que se registra.</param>
        public static void Registrar(Hospital hosp)
        {
            MySqlCommand command = getcommand();

            command.CommandText = "CALL registrar_hospital" + hosp.ToString();
            command.Connection.Open();
            command.ExecuteNonQuery();
            command.Connection.Close();
        }

        /// <summary>
        /// Método que realiza la consulta de hospitales.
        /// </summary>
        /// <returns>Dataset que contiene los hospitales</returns>
        public static DataSet ConsultarHospitales()
        {
            MySqlCommand command = getcommand();

            command.CommandText = "CALL consultar_hospitales";

            command.Connection.Open();
            command.Prepare();
            command.ExecuteScalar();
            command.Connection.Close();

            MySqlDataAdapter da = new MySqlDataAdapter(command);
            DataSet ds = new DataSet();
            da.Fill(ds, "hospitales");

            return ds;
        }

        /// <summary>
        /// Método que ejecuta el procedimiento para consultar un Hospital por su id en la base de datos.
        /// </summary>
        /// <param name="id">Identificador del Hospital que se va a consultar.</param>
        /// <returns>Objeto Hospital que contiene los datos del hospital consultado por su id</returns>
        public static Hospital Consultar(int id)
        {
            Hospital hospital;
            MySqlCommand command = getcommand();

            command.CommandText = "CALL consultar_hospital_por_id(?value)";
            command.Parameters.Add("?value", id);

            command.Connection.Open();
            MySqlDataReader rd = command.ExecuteReader();
            if (rd.Read())
            {
                hospital = new Hospital(id, rd.GetString(1), rd.GetString(2), 
                    rd.GetString(3), rd.GetString(4));
            }
            else
                hospital = new Hospital();
            command.Connection.Close();

            return hospital;
        }

        /// <summary>
        /// Método que ejecuta el procedimiento para consultar un Especialista en la base de datos.
        /// </summary>
        /// <param name="nombre">Parámetro que almacena el nombre del Hospital.</param>
        /// <returns>Dataset que contiene los datos del Hospital consultado.</returns>
        public static DataSet ConsultarPorNombre(string nombre)
        {
            MySqlCommand command = getcommand();

            command.CommandText = "CALL consultar_hospital_por_nombre(?value)";
            command.Parameters.Add("?value", nombre);

            command.Connection.Open();
            command.Prepare();
            command.ExecuteScalar();
            command.Connection.Close();

            MySqlDataAdapter da = new MySqlDataAdapter(command);
            DataSet ds = new DataSet();
            da.Fill(ds, "hospitales");

            return ds;
        }

        /// <summary>
        /// Este método se encarga de guardar en la base de datos las modificaciones hechas al Hospital.
        /// </summary>
        /// <param name="hospital">Objeto Hospital modificado.</param>
        public static void Actualizar(Hospital hospital)
        {
            MySqlCommand command = getcommand();

            command.CommandText = "CALL modificar_hospital" + hospital.ToString();
            command.Connection.Open();
            command.ExecuteNonQuery();
            command.Connection.Close();
        }

        /// <summary>
        /// Este método llama al procedimiento que elimina de la base de datos al Hospital con id.
        /// </summary>
        /// <param name="id">Identificador del Hospital que se va a eliminar.</param>
        public static void Eliminar(string id)
        {
            MySqlCommand command = getcommand();

            command.CommandText = "CALL eliminar_hospital(?value)";
            command.Parameters.Add("?value", id);

            command.Connection.Open();
            command.Prepare();
            command.ExecuteScalar();
            command.Connection.Close();
        }
    }
}
